"""
map算子
功能:map算子,是将RDD的数据一条条处理(处理的逻辑基于map算子中接收的处理函数), 返回新的RDD
"""
"""
map算子 (成员方法)
功能:map算子,是将RDD的数据一条条处理(处理的逻辑基于map算子中接收的处理函数), 返回新的RDD
语法:
rdd.map(func)

func :  f: (T) -> u

f:表示这是一个函数(方法)
(T) -> u表示这是方法的定义:
( ) 表示传入参数,  (T)表示传入一个参数,   ( ) 表示没有传入参数 
T 是泛型的代称, 在这里表示 任何类型
u 也是泛型的代称, 在这里表示 任何类型

 -> u表示返回值

(T) -> u 总结起来意思是: 这是一个方法,这个方法接受一个参数传入,传入参数类型不限,返回一个返回值.  返回值类型不限

(T) -> T 总结起来意思是: 这是一个方法,这个方法接受一个参数传入,传入参数类型不限,返回一个返回值.  返回值和传入参数类型一致

"""

import findspark
findspark.init(spark_home="D:/python311/Lib/site-packages/pyspark")
# 导包
from pyspark import SparkConf, SparkContext
# from pyspark import *

import os
# os.environ['pyspark_python'] = 'D:/python311/python.exe'  # 解释器路径
os.environ['PYSPARK_PYTHON'] = 'D:/python311/python.exe'  # 解释器路径  意思是告诉第三方库,python 在什么地方
"""
这里特别说明: 由于 prepare 是第三方库,它不知道 python 在哪里调用
导致我们用调用计算 prepare 库的功能的时候,会报错. 所以我们要在 os 包里,配置上 python 解释器路径

(操 因为版本原因,就是报错.这里3.11版本 要降到3.10才可以,所以以上方法3.10才适用)
"""

# 创建SparkConf类对象  (设置了任务模式和名称)
对象 = SparkConf()
对象.setMaster("local[*]")
对象.setAppName("这里自定义名称")

# 基于SparkConf类的对象,创建SparkContext类的对象
入口对象 = SparkContext(conf=对象)  # 括号里不加,也可以

# -----------上面的方法每次都是要操作的----------------------

# 准备一个RDD
数字列表 = [3, 2, 4]
rdd1 = 入口对象.parallelize(数字列表)

# 通过map方法,把数据都乘以 5  (多少无所谓,就是熟悉操作)


def x(y):
        return y * 5  # 上面的要求是乘以 5


rdd2 = rdd1.map(x)  # 括号里要传入一个函数,作为参数

print(rdd2.collect())
# 这里特别说明 由于是第三方库,需要配置 python 环境,上面导包有说明

# 关闭程序链接
入口对象.stop()
